Next:
Scatter Plot
, Previous:
GeoCoding
, Up:
Index
Heat Map
var
width
=
960
,
height
=
500
;
var
dx
=
data
[
0
]
.
length
,
dy
=
data
.
length
;
linear_scale을 통해 색상을 표현하기 위한 scale 정의
var
color
=
d3
.
scale
.
linear
(
)
.
domain
([
95
,
115
,
135
,
155
,
175
,
195
])
.
range
([
"#0a0"
,
"#6c0"
,
"#ee0"
,
"#eb4"
,
"#eb9"
,
"#fff"
])
;
canvas 객체
SVG 객체는 화면에 출력할 모든 정보를 객체 자체에 담고 있으며, 사용자의 상호작용을 처리하는
event handler를 연결할 수 있다.
사용자의 행위에 따라 필요한 객체만 화면에 다시 그려할 상황에 유리
Canvas 객체는 한 번 화면에 그린 것을 저장하지 않는다.
화면을 변경해야 하는 상황이 오는 경우, 그 영역을 다시 그려야 함
d3
.
select
(
"body"
)
.
append
(
"canvas"
)
.
attr
(
"width"
,
dx
)
.
attr
(
"height"
,
dy
)
.
style
(
"width"
,
width
+
"px"
)
.
style
(
"height"
,
height
+
"px"
)
.
call
(
drawImage
)
;
function
drawImage
(
canvas
)
{
var
context
=
canvas
.
node
(
)
.
getContext
(
"2d"
)
,
image
=
context
.
createImageData
(
dx
,
dy
)
;
for
(
var
y
=
0
,
p
=
-1
;
y
<
dy
;
++
y
)
{
for
(
var
x
=
0
;
x
<
dx
;
++
x
)
{
var
c
=
d3
.
rgb
(
color
(
data
[
y
]
[
x
]))
;
image
.
data
[
++
p
]
=
c
.
r
;
image
.
data
[
++
p
]
=
c
.
g
;
image
.
data
[
++
p
]
=
c
.
b
;
image
.
data
[
++
p
]
=
255
;
}
}
context
.
putImageData
(
image
,
0
,
0
)
;
}
axis
var
x
=
d3
.
scale
.
linear
(
)
.
domain
([
0
,
dx
])
.
range
([
0
,
width
])
;
var
y
=
d3
.
scale
.
linear
(
)
.
domain
([
0
,
dy
])
.
range
([
height
,
0
])
var
xAxis
=
d3
.
svg
.
axis
(
)
.
scale
(
x
)
.
orient
(
"top"
)
.
ticks
(
20
)
;
var
yAxis
=
d3
.
svg
.
axis
(
)
.
scale
(
y
)
.
orient
(
"right"
)
;
var
svg
=
d3
.
select
(
"body"
)
.
append
(
"svg"
)
.
attr
(
"width"
,
width
)
.
attr
(
"height"
,
height
)
;
svg
.
append
(
"g"
)
.
attr
(
"class"
,
"x axis"
)
.
attr
(
"transform"
,
"translate(0, "
+
height
+
")"
)
.
call
(
xAxis
)
.
call
(
removeZero
)
;
svg
.
append
(
"g"
)
.
attr
(
"class"
,
"y axis"
)
.
call
(
yAxis
)
.
call
(
removeZero
)
;
function
removeZero
(
axis
)
{
axis
.
selectAll
(
"g"
)
.
filter
(
function
(
d
)
{
return
!
d
;
})
.
remove
(
)
;
}